package com.eke.service;

import java.util.List;

import com.eke.bean.Course;
import com.eke.bean.CourseType;
import com.eke.bean.Sign_up;

public interface CourseSevice {
	/**
	 * 查询推荐课程
	 * 
	 * @return List<{@link Course}> 返回课程集合
	 */
	public List<Course> queryRecommendCourses();

	/**
	 * 查询4个大课程分类(用于首页显示)
	 * 
	 * @return List<{@link CourseType}> 返回课程类型集合
	 */
	public List<CourseType> queryFourBigCourseType();

	/**
	 * 通过课程分类id查询课程
	 * 
	 * @param courseTypeId
	 *            课程分类子id
	 * @return List<{@link Course}> 返回课程集合
	 */
	public List<Course> queryRecommendCourseByCourseTypeId(Integer courseTypeId);

	/**
	 * 查询所有一级分类
	 * 
	 * @return List<{@link CourseType}>
	 */
	public List<CourseType> queryAllBigCourseType();

	/**
	 * 查询所有二级分类byId
	 * 
	 * @param course_sub_type_id
	 * @return {@link List}<{@link CourseType}>
	 */
	public List<CourseType> queryAllTwoCourseType(Integer course_sub_type_id);

	/**
	 * 查询所有二级分类
	 * 
	 * @return {@link List}<{@link CourseType}>
	 */
	public List<CourseType> queryAllTwoCourseType();

	/**
	 * 查询所有三级分类
	 * 
	 * @return {@link List}<{@link CourseType}>
	 */
	public List<CourseType> queryAllThreeCourseType();

	/**
	 * * 根据课程分类id分页查询课程信息
	 * 
	 * @param courseId
	 *            课程id
	 * @param startRow
	 *            开始页
	 * @param pageSize
	 *            数量
	 * @return {@link List}<{@link Course}>
	 */
	public List<Course> queryCourseById(Integer courseId, int startRow, int pageSize);

	/**
	 * 通过课程分类ID查询课程数量
	 * 
	 * @param courseTypeId
	 *            课程分类id
	 * @return 课程总数
	 */
	public int queryCourseTotal(Integer courseTypeId);

	/**
	 * * 分页查询课程信息
	 * 
	 * @param startRow
	 *            开始页
	 * @param pageSize
	 *            数量
	 * @return {@link List}<{@link Course}>
	 */
	public List<Course> queryAllCourse(int startRow, int pageSize);

	/**
	 * 查询课程数量
	 * 
	 * @return int 课程总数
	 */
	public int queryCourseTotal();

	/**
	 * 根据课程名称查询课程
	 * 
	 * @param courseName
	 *            课程名
	 * @return {@link List}<{@link Course}> 返回课程集合
	 */
	public List<Course> queryCourseByCourseName(String courseName);

	/**
	 * 根据课程id查询课程信息
	 * 
	 * @param courseId
	 *            课程id
	 * @return {@link Course} 返回课程
	 */
	public Course queryCourseDeatilsById(Integer courseId);

	/**
	 * 添加课程
	 * 
	 * @param course
	 * @return {@link Boolean} 成功返回 true 失败返回 false
	 */
	public Boolean insertCourse(Course course);

	/**
	 * 根据用户id查询课程总数
	 * 
	 * @param userId
	 *            用户id
	 * @return int
	 */
	public int queryCourseTotalByUserId(int userId);

	/**
	 * 结合分页根据用户id查询课程
	 * 
	 * @param userId
	 *            用户id
	 * @param startRow
	 *            开始页
	 * @param pageSize
	 *            数量
	 * @return {@link List}<{@link Course}> 返回课程集合
	 */
	public List<Course> queryCourseByUserId(Integer userId, int startRow, Integer pageSize);
	
	/**
	 * 判断用户是否已经报名
	 * @param userId
	 * 			用户id
	 * @param courseId
	 * 			课程id
	 * @return
	 */
	public boolean isSignUp(Integer userId, Integer courseId);
	
	/**
	 * 报名课程
	 * @param entry
	 * @return {@link Boolean}
	 */
	public boolean signCourse(Sign_up sign_up);
}
